import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    cart: []
  },
  getters: {
    // 计算购物车总价
    totalPrice: state => {
      return state.cart.reduce((total, item) => total + (item.price * item.quantity), 0)
    },
    // 获取购物车商品
    cartItems: state => {
      return state.cart
    }
  },
  mutations: {
    // 添加商品到购物车
    ADD_TO_CART(state, product) {
      const existingProduct = state.cart.find(item => item.id === product.id)
      
      if (existingProduct) {
        existingProduct.quantity += 1
      } else {
        state.cart.push({
          ...product,
          quantity: 1
        })
      }
    },
    // 从购物车中移除商品
    REMOVE_FROM_CART(state, productId) {
      state.cart = state.cart.filter(item => item.id !== productId)
    },
    // 增加商品数量
    INCREMENT_QUANTITY(state, productId) {
      const product = state.cart.find(item => item.id === productId)
      if (product) {
        product.quantity += 1
      }
    },
    // 减少商品数量
    DECREMENT_QUANTITY(state, productId) {
      const product = state.cart.find(item => item.id === productId)
      if (product) {
        if (product.quantity > 1) {
          product.quantity -= 1
        } else {
          // 如果数量减少到1，则移除商品
          state.cart = state.cart.filter(item => item.id !== productId)
        }
      }
    }
  },
  actions: {
    // 添加商品到购物车
    addToCart({ commit }, product) {
      commit('ADD_TO_CART', product)
    },
    // 从购物车中移除商品
    removeFromCart({ commit }, productId) {
      commit('REMOVE_FROM_CART', productId)
    },
    // 增加商品数量
    incrementQuantity({ commit }, productId) {
      commit('INCREMENT_QUANTITY', productId)
    },
    // 减少商品数量
    decrementQuantity({ commit }, productId) {
      commit('DECREMENT_QUANTITY', productId)
    }
  }
})